
import java.sql.*;
import javax.swing.JOptionPane;

// Nécéssite pour fonctionner l'ajout du pilote mysql à la biliothèque du projet !
public class bdd {

  private static bdd instance;
  private String driver;
  private String base;
  private String url;
  private String login;
  private String pass;
  private Connection connec;
  private Statement linkBd;

  // Etablit la connexion avec la BDD
  public bdd() {

    // ------------ Params BDD ------------ //
    this.driver = "com.mysql.jdbc.Driver";
    this.base = "semspe";
    this.url = "jdbc:mysql://localhost:8889/semspe";
    this.login = "root";
    this.pass = "root";
    //this.base="glece";
    //this.url="jdbc:mysql://srv-svn.iut-acy.local/"+this.base;
    //this.login="glece";
    //this.pass="bYswNi";
    // ------------------------------------ //

    // Chargement du pilote bdd mysql
    try {
      Class.forName(driver);
      this.connec = DriverManager.getConnection(url, login, pass);
      this.linkBd = connec.createStatement();
    } catch (ClassNotFoundException e) {
      JOptionPane.showMessageDialog(null, "Le driver de base de données est manquant. \nLe programme va quitter.", "Erreur fatale", JOptionPane.ERROR_MESSAGE);
      System.exit(0);
    } catch (Exception e) {
      JOptionPane.showMessageDialog(null, "Erreur de connexion à la BDD. \nLe programme va quitter.", "Erreur fatale", JOptionPane.ERROR_MESSAGE);
      System.exit(0);
    }
  }

  public static bdd getInstance() {
    if (instance == null) {
      instance = new bdd();
    }
    return instance;
  }

  // Execute une requête de sélection
  // Retourne une exception si échec
  public ResultSet req(String req) throws SQLException {
    try {
      return this.linkBd.executeQuery(req);
    } catch (SQLException e) {
      throw new SQLException("Echec de la requête : " + req + " \n Erreur SQL : " + e.getMessage());
    }
  }

  // Execute une requête de sélection
  // Retourne -1 si échec
  public int update(String req) throws SQLException {
    try {
      return this.linkBd.executeUpdate(req);
    } catch (SQLException e) {
      throw new SQLException("Echec de la requête : " + req + " \n Erreur SQL : " + e.getMessage());
    }
  }
  /* Exemple d'utilisation
  public static void main(String [] a) {
  
  try {
  bdd db = bdd.getInstance();
  int nb;
  ResultSet res;
  
  nb = db.update("DELETE FROM ap4_sp_item");
  
  nb = db.update("INSERT INTO ap4_sp_item (nom, categorie) VALUES('aaa',1),('ccc',2),('eee',3)");
  System.out.println(nb+" enregistrement ok");
  
  res = db.req("SELECT * FROM ap4_sp_item ORDER BY idItem DESC");
  
  while(res.next()) {
  System.out.println("Id : "+res.getInt("idItem")+", Cr : "+res.getString("nom")+", Tx : "+res.getString(3));
  }
  }
  
  catch(SQLException e) { System.out.println("Erreur de requete : "+e);}
  }// */
}
